void Exec_MSG_CombineItemAlquimia(int conn, char *pMsg) { MSG_CombineItem *m = (MSG_CombineItem*)pMsg; for (int i = 0; i < MAX_COMBINE; i++) { if (m->Item[i].sIndex == 0) continue; int invPos = m->InvenPos[i]; if (invPos < 0 || invPos >= pMob[conn].MaxCarry) { RemoveTrade(conn); return; } if (memcmp(&pMob[conn].MOB.Carry[invPos], &m->Item[i], sizeof(STRUCT_ITEM))) { ItemLog("err,msg_CombineAlquimia - item remove or changed.", pUser[conn].AccountName, pUser[conn].IP); SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 0); return; } } int combine = GetMatchCombineAlquimia(m->Item); if (combine == -1 || pMob[conn].MOB.Class != 3) { SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 0); return; } for (int i = 0; i < MAX_COMBINE; i++) { if (m->Item[i].sIndex == 0) continue; memset(&pMob[conn].MOB.Carry[m->InvenPos[i]], 0, sizeof(STRUCT_ITEM)); SendItem(conn, ITEM_PLACE_CARRY, m->InvenPos[i], &pMob[conn].MOB.Carry[m->InvenPos[i]]); } ItemLog("*** Item combine ht_skill_alquimia. ***", pUser[conn].AccountName, pUser[conn].IP); for (int i = 0; i < MAX_COMBINE; i++) { if (m->Item[i].sIndex) { char itemlog[2048]; BASE_GetItemCode(&m->Item[i], itemlog); strcat(temp, itemlog); } } ItemLog(temp, pUser[conn].AccountName, pUser[conn].IP); ItemLog("*** ------------------- ***", pUser[conn].AccountName, pUser[conn].IP); int _rand = rand() % 115; if (_rand >= 100) _rand -= 15; int chance = (pMob[conn].MOB.CurrentScore.Special[2] + 1) / 6; if (_rand <= chance || LOCALSERVER) { pMob[conn].MOB.Carry[m->InvenPos[0]].sIndex = 3200 + combine; pMob[conn].MOB.Carry[m->InvenPos[0]].stEffect[0].cEffect = 0; pMob[conn].MOB.Carry[m->InvenPos[0]].stEffect[0].cValue = 0; pMob[conn].MOB.Carry[m->InvenPos[0]].stEffect[1].cEffect = 0; pMob[conn].MOB.Carry[m->InvenPos[0]].stEffect[1].cValue = 0; pMob[conn].MOB.Carry[m->InvenPos[0]].stEffect[2].cEffect = 0; pMob[conn].MOB.Carry[m->InvenPos[0]].stEffect[2].cValue = 0; SendItem(conn, ITEM_PLACE_CARRY, m->InvenPos[0], &pMob[conn].MOB.Carry[m->InvenPos[0]]); SendClientMessage(conn, g_pMessageStringTable[_NN_Processing_Complete]); SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 1); sprintf(temp, "%s ", pUser[conn].AccountName); ItemLog(temp, "*** Combine ht_skill_alquimia sucess ***", pUser[conn].IP); return; } else { SendClientMessage(conn, g_pMessageStringTable[_NN_CombineFailed]); SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 2); Log("*** Combine ht_skill_alquimia fail ***", pUser[conn].AccountName, pUser[conn].IP); return; } }
void Exec_MSG_DropItem(int conn, char *pMsg) { MSG_DropItem *m = (MSG_DropItem*)pMsg; if (pMob[conn].MOB.CurrentScore.Hp <= 0 || pUser[conn].Mode != USER_PLAY) { AddCrackError(conn, 1, 14); SendHpMode(conn); return; } if (pUser[conn].Trade.OpponentID) { RemoveTrade(pUser[conn].Trade.OpponentID); RemoveTrade(conn); return; } if (pUser[conn].TradeMode) { SendClientMessage(conn, g_pMessageStringTable[_NN_CantWhenAutoTrade]); return; } if (m->GridX >= MAX_GRIDX || m->GridY >= MAX_GRIDY) { sprintf(temp, "err,wrong drop pos %d %d", m->GridX, m->GridY); Log(temp, pUser[conn].AccountName, pUser[conn].IP); return; } if (isDropItem == 0) return; int gridx = m->GridX; int gridy = m->GridY; int titem = GetEmptyItemGrid(&gridx, &gridy); m->GridX = gridx; m->GridY = gridy; if (titem == 0) { SendClientMessage(conn, g_pMessageStringTable[_NN_Cant_Drop_Here]); return; } if (m->SourType == ITEM_PLACE_EQUIP) { Log("err,dropitem - sourtype", pUser[conn].AccountName, pUser[conn].IP); return; } if (m->SourType) { if (m->SourType == ITEM_PLACE_CARRY) { if (m->SourPos < 0 || m->SourPos >= pMob[conn].MaxCarry) { Log("err,dropitem - carry equip", pUser[conn].AccountName, pUser[conn].IP); return; } } else { if (m->SourType != ITEM_PLACE_CARGO) { Log("err,dropitem - sourtype", pUser[conn].AccountName, pUser[conn].IP); return; } if (m->SourPos < 0 || m->SourPos >= MAX_CARGO) { Log("err,dropitem - sourpos cargo", pUser[conn].AccountName, pUser[conn].IP); return; } } } STRUCT_ITEM *SrcItem = GetItemPointer(&pMob[conn].MOB, pUser[conn].Cargo, m->SourType, m->SourPos); STRUCT_ITEM *BackupItem = GetItemPointer(&pMob[conn].MOB, pUser[conn].Cargo, m->SourType, m->SourPos); if (SrcItem == NULL || BackupItem == NULL) return; if (SrcItem->sIndex <= 0 || SrcItem->sIndex >= MAX_ITEMLIST) return; if (SrcItem->sIndex != 508 && SrcItem->sIndex != 509 && SrcItem->sIndex != 522 && (SrcItem->sIndex < 526 || SrcItem->sIndex > 537) && SrcItem->sIndex != 446 && SrcItem->sIndex != 747 && SrcItem->sIndex != 3993 && SrcItem->sIndex != 3994) { int drop = CreateItem(m->GridX, m->GridY, SrcItem, m->Rotate, 1); if (drop <= 0 || drop >= MAX_ITEM) { SendClientMessage(conn, "Can't create object(item)"); return; } char tmplog[2048]; BASE_GetItemCode(SrcItem, tmplog); sprintf(temp, "dropitem, %s", tmplog); ItemLog(temp, pUser[conn].AccountName, pUser[conn].IP); memset(SrcItem, 0, sizeof(STRUCT_ITEM)); MSG_CNFDropItem sm_ditem; memset(&sm_ditem, 0, sizeof(MSG_CNFDropItem)); sm_ditem.Type = _MSG_CNFDropItem; sm_ditem.Size = sizeof(MSG_CNFDropItem); sm_ditem.SourType = m->SourType; sm_ditem.SourPos = m->SourPos; sm_ditem.Rotate = m->Rotate; sm_ditem.GridX = m->GridX; sm_ditem.GridY = m->GridY; pUser[conn].cSock.SendOneMessage((char*)&sm_ditem, sizeof(MSG_CNFDropItem)); } else { SendClientMessage(conn, g_pMessageStringTable[_NN_Guild_Medal_Cant_Be_Droped]); return; } }
void Exec_MSG_CombineItemExtracao(int conn, char *pMsg) { MSG_STANDARDPARM2 *m = (MSG_STANDARDPARM2*)pMsg; int ItemSlot = m->Parm2; if (ItemSlot < 0 || ItemSlot >= pMob[conn].MaxCarry) return; int item = pMob[conn].MOB.Carry[ItemSlot].sIndex; if(item <= 0 || item >= MAX_ITEMLIST) return; int itemlevel = BASE_GetItemAbility(&pMob[conn].MOB.Carry[ItemSlot], EF_ITEMLEVEL); if(itemlevel >= 5) return; if(BASE_GetItemSanc(&pMob[conn].MOB.Carry[ItemSlot]) < 9) return; if((g_pItemList[item].nPos != 2 && g_pItemList[item].nPos != 4 && g_pItemList[item].nPos != 8 && g_pItemList[item].nPos != 16 && g_pItemList[item].nPos != 32) || BASE_GetItemAbility(&pMob[conn].MOB.Carry[ItemSlot], EF_MOBTYPE) != 0) return; int i = 0; for (i = 0; i < pMob[conn].MaxCarry; i++) { if (pMob[conn].MOB.Carry[i].sIndex != 1774) continue; BASE_ClearItem(&pMob[conn].MOB.Carry[i]); SendItem(conn, ITEM_PLACE_CARRY, i, &pMob[conn].MOB.Carry[i]); break; } if (i == pMob[conn].MaxCarry) return; int _rnd = rand()%115; if(_rnd > 100) _rnd -= 15; int rate = (pMob[conn].MOB.CurrentScore.Special[2] + 1) / 6; if(_rnd < rate) { pMob[conn].MOB.Carry[ItemSlot].stEffect[0].cEffect = EF_ITEMLEVEL; pMob[conn].MOB.Carry[ItemSlot].stEffect[0].cValue = itemlevel; if(pMob[conn].MOB.Carry[ItemSlot].stEffect[1].cEffect == EF_DAMAGE) pMob[conn].MOB.Carry[ItemSlot].stEffect[1].cValue += BASE_GetStaticItemAbility(&pMob[conn].MOB.Carry[ItemSlot], EF_DAMAGE); if(pMob[conn].MOB.Carry[ItemSlot].stEffect[2].cEffect == EF_DAMAGE) pMob[conn].MOB.Carry[ItemSlot].stEffect[2].cValue += BASE_GetStaticItemAbility(&pMob[conn].MOB.Carry[ItemSlot], EF_DAMAGE); pMob[conn].MOB.Carry[ItemSlot].sIndex = 3021; if(g_pItemList[item].nPos == 4) pMob[conn].MOB.Carry[ItemSlot].sIndex++; else if(g_pItemList[item].nPos == 8) pMob[conn].MOB.Carry[ItemSlot].sIndex += 2; else if(g_pItemList[item].nPos == 16) pMob[conn].MOB.Carry[ItemSlot].sIndex += 3; else if(g_pItemList[item].nPos == 32) pMob[conn].MOB.Carry[ItemSlot].sIndex += 4; SendItem(conn, ITEM_PLACE_CARRY, ItemSlot, &pMob[conn].MOB.Carry[ItemSlot]); char tt[256]; sprintf(temp, "%s ", pUser[conn].AccountName); BASE_GetItemCode(&pMob[conn].MOB.Carry[ItemSlot], tt); strcat(temp, tt); ItemLog(temp, "*** Combine ht_skill_extração sucess ***", pUser[conn].IP); } else { BASE_ClearItem(&pMob[conn].MOB.Carry[ItemSlot]); SendItem(conn, ITEM_PLACE_CARRY, ItemSlot, &pMob[conn].MOB.Carry[ItemSlot]); ItemLog("*** Combine ht_skill_extração fail ***", pMob[conn].MOB.MobName, pUser[conn].IP); } }
void Exec_MSG_CombineItemAilyn(int conn, char *pMsg) { MSG_CombineItem *m = (MSG_CombineItem*)pMsg; for (int i = 0; i < MAX_COMBINE; i++) { if (m->Item[i].sIndex == 0) continue; int invPos = m->InvenPos[i]; if (invPos < 0 || invPos >= pMob[conn].MaxCarry) { RemoveTrade(conn); return; } if (memcmp(&pMob[conn].MOB.Carry[invPos], &m->Item[i], sizeof(STRUCT_ITEM))) { ItemLog("err,msg_CombineAilyn - item remove or changed.", pUser[conn].AccountName, pUser[conn].IP); SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 0); return; } } if (pMob[conn].MOB.Coin < 50000000) { sprintf(temp, g_pMessageStringTable[_DN_D_Cost], 50000000); SendClientMessage(conn, temp); SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 0); return; } int combine = GetMatchCombineAilyn(m->Item); if (combine == 0) { SendClientMessage(conn, g_pMessageStringTable[_NN_Wrong_Combination]); SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 0); return; } for (int i = 2; i < MAX_COMBINE; i++) { if (m->Item[i].sIndex == 0) continue; memset(&pMob[conn].MOB.Carry[m->InvenPos[i]], 0, sizeof(STRUCT_ITEM)); SendItem(conn, ITEM_PLACE_CARRY, m->InvenPos[i], &pMob[conn].MOB.Carry[m->InvenPos[i]]); } pMob[conn].MOB.Coin -= 50000000; SendEtc(conn); ItemLog("*** Item combine ailyn. ***", pUser[conn].AccountName, pUser[conn].IP); for (int i = 0; i < MAX_COMBINE; i++) { if (m->Item[i].sIndex) { char itemlog[2048]; BASE_GetItemCode(&m->Item[i], itemlog); strcat(temp, itemlog); } } ItemLog(temp, pUser[conn].AccountName, pUser[conn].IP); ItemLog("*** ------------------- ***", pUser[conn].AccountName, pUser[conn].IP); int _rand = rand() % 115; if (_rand >= 100) _rand -= 15; int ipos1 = 0; int ipos2 = 0; if (_rand <= combine || LOCALSERVER) { if (rand() % 1 == 0) { ipos1 = m->InvenPos[0]; ipos2 = m->InvenPos[1]; } else { ipos1 = m->InvenPos[1]; ipos2 = m->InvenPos[0]; } pMob[conn].MOB.Carry[ipos1].stEffect[0].cEffect = pMob[conn].MOB.Carry[ipos2].stEffect[0].cEffect; pMob[conn].MOB.Carry[ipos1].stEffect[0].cValue = pMob[conn].MOB.Carry[ipos2].stEffect[0].cValue; pMob[conn].MOB.Carry[ipos1].stEffect[1].cEffect = pMob[conn].MOB.Carry[ipos2].stEffect[1].cEffect; pMob[conn].MOB.Carry[ipos1].stEffect[1].cValue = pMob[conn].MOB.Carry[ipos2].stEffect[1].cValue; pMob[conn].MOB.Carry[ipos1].stEffect[2].cEffect = pMob[conn].MOB.Carry[ipos2].stEffect[2].cEffect; pMob[conn].MOB.Carry[ipos1].stEffect[2].cValue = pMob[conn].MOB.Carry[ipos2].stEffect[2].cValue; BASE_SetItemSanc(&pMob[conn].MOB.Carry[ipos1], 10, m->Item[3].sIndex - 2441); memset(&pMob[conn].MOB.Carry[ipos2], 0, sizeof(STRUCT_ITEM)); SendItem(conn, ITEM_PLACE_CARRY, ipos2, &pMob[conn].MOB.Carry[ipos2]); pMob[conn].MOB.Coin -= 50000000; SendEtc(conn); SendClientMessage(conn, g_pMessageStringTable[_NN_Processing_Complete]); SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 1); char tt[512]; sprintf(temp, "%s ", pUser[conn].AccountName); BASE_GetItemCode(&pMob[conn].MOB.Carry[ipos1], tt); strcat(temp, tt); ItemLog(temp, "*** Combine ailyn sucess ***", pUser[conn].IP); SendItem(conn, ITEM_PLACE_CARRY, ipos1, &pMob[conn].MOB.Carry[ipos1]); return; } else { sprintf(temp, "%s", g_pMessageStringTable[_NN_CombineFailed]); SendClientMessage(conn, temp); SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 2); ItemLog("*** Combine ailyn fail ***", pUser[conn].AccountName, pUser[conn].IP); return; } }