Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation on 08/14/2019 in all areas

  1. 1 point
    Bug Title: amplifier unlimited stats Bug Description: remove amps stats after switch or use a ticket in same region , unlimited stats time if player login after real ticks finished example : used nana for 10 min , if player logged out then logged after 11min or more nana will be 15999998 seconds Status: Closed Author: mkhzaleh this will save real time and stop ticks when player logout inside Character.cpp search for void CCharacter::SwitchMap(SubMap *pCSrcMap, cChar *szTarMapName, Long lTarX, Long lTarY, bool bNeedOutSrcMap, Char chSwitchType, Long lTMapCpyNO) replace with void CCharacter::SwitchMap(SubMap *pCSrcMap, cChar *szTarMapName, Long lTarX, Long lTarY, bool bNeedOutSrcMap, Char chSwitchType, Long lTMapCpyNO) {T_B if (!pCSrcMap) return; BreakAction(); if( IsPlayerCha() ) { SetSubMap( pCSrcMap ); GetPlayer()->MisGooutMap(); SetSubMap( NULL ); } if (bNeedOutSrcMap && pCSrcMap) pCSrcMap->GoOut(this); if (!strcmp(pCSrcMap->GetName(), szTarMapName)) // 同地图间切换 { if (GetPlayer()) //LG("enter_map", "SwitchMap(同地图切换,控制角色名 %s[主角色名 %s],地图名 %s)--------\n", GetLogName(), GetPlyMainCha()->GetLogName(), szTarMapName); LG("enter_map", "SwitchMap(the same map switch,control player name %s[mainplayer %s],mapname %s)--------\n", GetLogName(), GetPlyMainCha()->GetLogName(), szTarMapName); if (m_SMoveRedu.ulStartTick == 0xffffffff) m_SMoveRedu.ulStartTick = GetTickCount(); if(!IsPlayerCha()) // 非玩家角色,则在自己的出生点重生 { m_SFightInit.chTarType = 0; m_CChaAttr.Init(GetCat()); Square SSrcShape = GetShape(); Square STarShape = {{lTarX, lTarY}, GetRadius()}; if (!pCSrcMap->Enter(&STarShape, this)) pCSrcMap->Enter(&SSrcShape, this); } else { SStateData2String(this, g_skillstate, 1024); //PStateData2String(this, g_skillstate, 1024); if (IsBoat()) g_strChaState[1] = g_skillstate; else g_strChaState[0] = g_skillstate; Square SSrcShape = GetShape(); Square STarShape = {{lTarX, lTarY}, SSrcShape.radius}; if (!pCSrcMap->EnsurePos(&STarShape, this)) // 进入失败 { lTarX = SSrcShape.centre.x; lTarY = SSrcShape.centre.y; } GetPlayer()->GetMainCha()->Cmd_EnterMap(szTarMapName, lTMapCpyNO, lTarX, lTarY); // 角色护送NPC同步地图切换 GetPlayer()->MisEnterMap(); } SetExistState(enumEXISTS_WAITING); return; } else { bool bVolunteer = false; SubMap *pCBackM = GetSubMap(); SetSubMap(pCSrcMap); pCSrcMap->BeforePlyOutMap(this); //LG("enter_map", "SwitchMap(不同Server地图切换,控制角色名 %s[主角色名 %s],原地图 %s,目标地图 %s)--------\n", GetLogName(), GetPlyMainCha()->GetLogName(), pCSrcMap->GetName(), szTarMapName); LG("enter_map", "SwitchMap(differ Server map switch,control player name %s[mainplayer %s],formerly map %s,aimmap %s)--------\n", GetLogName(), GetPlyMainCha()->GetLogName(), pCSrcMap->GetName(), szTarMapName); if (GetSubMap()) //LG("enter_map", "角色地图名 %s\n", GetSubMap()->GetName()); LG("enter_map", "character map name %s\n", GetSubMap()->GetName()); // 资料写数据库 CPlayer *pPlayer = GetPlayer(); if(!pPlayer) return; //组队面板修改 if(GetPlyMainCha()->IsVolunteer()) { bVolunteer = true; GetPlyMainCha()->Cmd_DelVolunteer(); } game_db.SavePlayer(pPlayer, enumSAVE_TYPE_SWITCH); //LG("enter_map", "保存数据成功\n"); LG("enter_map", "save data succeed\n"); // 角色护送NPC同步地图切换 pPlayer->MisLogout(); SetSubMap(pCBackM); // 发送协议 WPACKET l_wpk =GETWPACKET(); WRITE_CMD(l_wpk, CMD_MT_SWITCHMAP); WRITE_STRING(l_wpk, pCSrcMap->GetName()); WRITE_LONG(l_wpk, pCSrcMap->GetCopyNO()); WRITE_LONG(l_wpk, GetShape().centre.x); WRITE_LONG(l_wpk, GetShape().centre.y); WRITE_STRING(l_wpk, szTarMapName); WRITE_LONG(l_wpk, lTMapCpyNO); WRITE_LONG(l_wpk, lTarX); WRITE_LONG(l_wpk, lTarY); if (chSwitchType == enumSWITCHMAP_DIE) // 死亡导致的地图切换(如果目标地图不可达,则gate强制玩家下线,不会返回源地图) WRITE_CHAR(l_wpk, 1); else WRITE_CHAR(l_wpk, 0); ReflectINFof(this,l_wpk); g_pGameApp->DelPlayerIdx(pPlayer->GetDBChaId()); g_pGameApp->m_dwPlayerCnt--; pPlayer->Free(); // 删除gate server对应的维护信息 pPlayer->OnLogoff(); DELPLAYER(pPlayer); //LG("enter_map", "结束进入地图\n\n"); LG("enter_map", "finish enter map\n\n"); } T_E} inside GameDB.cpp search for PStateData2String(pCha, g_skillstate, defSSTATE_DATE_STRING_LIN); replace with SStateData2String(pCha, g_skillstate, defSSTATE_DATE_STRING_LIN);
  2. 1 point
    Bug Title: Guild Attribute Refresh Bug Description: Player attributes are not refreshing instantly when applying an attribute from guild. How to replicate: Open character and guild stats, buy an attribute from guild and the character attribute will not refresh instantly. Only upon teleporting will they refresh. Status: Closed Author: Angelix Source Code - GameApp.h Description: I think DealAllInGuild function was not calling the function RefreshCha correctly, it was trying to send an extra parameter. Checking whether the extra parameter exists or not does the trick and then sending the called function after. inline bool CGameApp::DealAllInGuild(int guildID, const char* luaFunc, const char* luaParam){ BEGINGETGATE(); CPlayer *pCPlayer; CCharacter *pCha = 0; GateServer *pGateServer; while (pGateServer = GETNEXTGATE()){ if (!BEGINGETPLAYER(pGateServer)) continue; int nCount = 0; while (pCPlayer = (CPlayer *)GETNEXTPLAYER(pGateServer)) { if (++nCount > GETPLAYERCOUNT(pGateServer)){ LG("player chain list error", "player number:%u, %s\n", GETPLAYERCOUNT(pGateServer), "DealAllInGuild"); break; } pCha = pCPlayer->GetCtrlCha(); if (!pCha) continue; if (pCha->GetPlayer()->GetMainCha()->GetValidGuildID() == guildID){ if (luaParam != ""){ g_CParser.DoString(luaFunc, enumSCRIPT_RETURN_NONE, 0, enumSCRIPT_PARAM_LIGHTUSERDATA, 1, pCha, enumSCRIPT_PARAM_STRING, 1, luaParam, DOSTRING_PARAM_END); } else{ g_CParser.DoString(luaFunc, enumSCRIPT_RETURN_NONE, 0, enumSCRIPT_PARAM_LIGHTUSERDATA, 1, pCha, DOSTRING_PARAM_END); } } } } return true; } Lua Functions: This function was just missing the guildID call at the beginning. function UpdateGuildAttrs(role) local guildID = GetChaGuildID(role) if not guildAttributes[guildID] then InitGuildAttr(guildID,0,0,0,0,0,0,0,0,0,0,0,0) end local pkt = GetPacket() WriteCmd(pkt,508) WriteDword(pkt,GetRoleID(role)) WriteDword(pkt,0) WriteByte(pkt,32) WriteDword(pkt,guildAttributes[guildID][ATTR_PDEF] or 0) WriteDword(pkt,guildAttributes[guildID][ATTR_MSPD] or 0) WriteDword(pkt,guildAttributes[guildID][ATTR_ASPD] or 0) WriteDword(pkt,guildAttributes[guildID][ATTR_MXATK] or 0) WriteDword(pkt,guildAttributes[guildID][ATTR_DEF] or 0) WriteDword(pkt,guildAttributes[guildID][ATTR_HIT] or 0) WriteDword(pkt,guildAttributes[guildID][ATTR_FLEE] or 0) WriteDword(pkt,guildAttributes[guildID][ATTR_HREC] or 0) WriteDword(pkt,guildAttributes[guildID][ATTR_SREC] or 0) WriteDword(pkt,guildAttributes[guildID][ATTR_MXHP] or 0) WriteDword(pkt,guildAttributes[guildID][ATTR_MXSP] or 0) SendPacket(role,pkt) end
  3. 1 point
    just convert them with webconvert from the client. Voce ta usando o uMMORPG?
  4. 1 point
  5. 1 point
    Mano eu não entendi direito, tu quer os arquivos model que tem no client? Não entendi direito Chama no Face
  6. 1 point
    Si te interesa puedo ayudarte
  • Newsletter

    Want to keep up to date with all our latest news and information?
    Sign Up
×
×
  • Create New...